查看原文
其他

Python教学 | 组合数据类型 - 字典&元组

快点关注→ 数据Seminar 2023-02-21

目录

一、前言

二、什么是字典,字典有哪些特点

三、如何创建字典

四、如何增、删、改、查字典中的元素(键-值对)

  1. 向字典中添加元素

  2. 删除字典元素

  3. 修改字典元素

  4. 查找字典元素

  5. 基于近义词

五、字典的常用方法

  1. dict.keys()

  2. dict.values()

  3. dict.items()

六、Python 组合数据类型元组

七、结束语

本文共4136个字,阅读大约需要13分钟,欢迎指正!

Part1前言

上期文章我们介绍了 Python 组合数据类型中的集合,并引入了可变数据类型与不可变数据类型的概念,这让大家对数据类型有了一个新的认识。

本期文章我们将学习 Python 四大组合数据类型中的字典元组,其中字典是相对而言更加重要的内容。字典是 Python 中一种存放一 一对应(具有指向性)关系的数据类型,常用于处理关联数据。我们通过一个实例来简单了解一下字典的功能与优势。有一个数据量超过 270w 行的农民专业合作社基本信息表(数据来自浙大卡特-企研中国涉农研究数据库,简称“CCAD”),如下图所示(仅展示部分字段)。

我们希望在程序中通过合作社的名称查询到合作社的其他信息,例如成立时间。由于数据量比较大,我们需要考虑查询的效率以及占用内存的大小。在 Python 中,我们可以将表中的合作社名称和成立时间两字段转为如下图所示具有映射关系的字典类型。

利用上面的字典,我们能够使用企业名称快速地查询该合作社成立时间。尽管字典类型在节省内存方面不是高手,但实测发现,在存储相同内容的前提下,使用字典类型所占用的内存仍是使用表结构所占内存的 1/8 - 1/4!而且在这个含有 270w+ 映射关系的字典中随机查询 500 家合作社的成立时间,花费的总时间仍能控制在 1 毫秒之内!这么强大的字典,还不快学起来?

Part2什么是字典,字典有哪些特点

字典是一种典型的映射类型映射是一个数学术语,指两个元素之间的对应关系,这样的两个元素在 Python 中被称为键(key)值(value)。在字典类型中,一个键与一个值构成了一个键-值对,一个键-值对就是字典中的一个元素,这种结构与组合类型中的其他几种有着很大不同,其作用就是可以通过字典的键来访问字典的值,就好似给值(value)起了一个别名(key),我们可以通过这个别名来访问值。如下图所示。

在 Python 程序中,字典中的键-值对是使用冒号 : 连接的,各个元素(键-值对)之间使用逗号 , 隔开,所有元素被一对大括号 {} 包裹起来,如下图所示。

那么字典有哪些特点呢?

(1) 字典键必须是不可变数据类型

在上图所示的字典中,我们可以通过字典的键(key1、key2、key3)来访问字典的值(value1、value2、value3)。这里的“值”可以是 Python 中的任何类型,但“键”必须是不可变数据类型,这是因为我们要通过键来访问值,如果在程序运行中,字典的键发生变化,那我们就不能再正常访问该键对应的值了。

(2) 字典的键是唯一的

除此之外,字典中的键必须是唯一的,即不允许字典中存在两个相同的键,这样就可以保证字典中的键与值必然是一一对应的关系。

(3) 字典的无序性&有序性

字典是无序的呢,还是有序的呢?这个问题没有绝对的答案,但是我们可以明确地说,字典没有索引属性,我们无法通过索引或者序号来获取字典的元素。既然如此,为什么字典的无序性存有争议呢?这是因为无序与有序并不单单体现在是否具有索引,还体现在元素之间的顺序是否会改变。在 Python 3.5(含3.5)版本之前,字典是绝对无序的,我们创建一个字典之后,其内元素的顺序会随机排列,不会按照创建字典时元素的顺序排列并保持不变。但是这种机制给程序员带来诸多不便,于是在 Python 3.6(含3.6)版本之后,字典类型加入了一些改进,变得“有序”了,即字典中元素的顺序会按照创建时的顺序排列并保持不变。这样一来,我们说 Python 字典是有序的,也变得有理有据了。

Part3如何创建字典

不同于创建列表、集合,创建字典的方式有很多种,接下来我们介绍较为基础的几种。

1创建空字典

创建空字典主要有以下两种方式:

# 方式一,直接使用一对空的大括号
KONG_DICT = {}

# 方式二,使用 dict() 函数,不传入任何参数
KONG_DICT = dict()

2标准创建方式

可以直接按照字典的样式来创建字典,这种方式最直观。

# 创建组合数据类型可以合理使用换行,查看数据更加直观
DICT = {
    '字典':'可变数据类型',
    '集合':'可变数据类型',
    '字符串':'不可变数据类型',
}

3使用关键字创建

将一个关键字组合视为一个键-值对,样例代码和效果如下图所示。

4使用键-值对创建

如下图所示。

Part4如何增、删、改、查字典中的元素(键-值对)

1向字典中添加元素

我们操作字典中的键-值对,主要是通过键-值对中的“键”来操作“值”。如果想要向字典中添加一个键-值对(注意如果只是添加键-值对,需要保证要添加的元素的键不在当前字典中,如果要添加的键已经在字典中了,那我们的操作就变成了修改元素),只需要将值赋值给字典的键即可,这样说会有些抽象,看操作示例会更加容易理解,示例如下图所示。

除此之外,还可以使用字典的 update() 函数将一个字典中的所有键-值对更新到另一个字典中,如果两个字典存有相同的键,那么更新后的字典中,相同键对应的值以前者为准,使用示例如下图所示。

2删除字典元素

删除字典某元素通常有多种方式,最常用的有两种,一种是使用 pop() 函数,另一种是使用 del 关键字或 del() 函数。两种方式用法稍有不同,同样是将要删除的元素的键传入函数中,但传入键的方式不同。如果要删除的键不在字典中,两种方式都会报告错误,使用示例如下图所示。

如果想要清空字典中所有元素,可以使用 clear() 函数,操作如下图所示。

3修改字典元素

修改字典元素仅限于修改字典中键-值对中的值,做法很简单,只需要将新的值赋值给字典的键即可,如下图所示。

如果想要修改键-值对中的键,我们只能先删除要修改的键-值对,再将新的键-值对添加到字典中。

4查找字典元素

字典存在的最大意义就是方便我们通过键来访问值,所以查找字典元素才是字典真正的用武之地。访问字典元素值最常用的方式就是直接使用键,如果要查找的键不在字典中,程序会报告错误,如下图所示。

除此之外,我们还可以使用字典的 get() 方法来获取键-值对的值,只需要将键传入其中即可获取对应的值,与前面一种方法不同的是,使用 get() 方法获取值时,如果查找的键不在字典中,该方法不会报错,而是返回空值 None,此外我们还可以自定义这种情况的返回值。使用示例如下图所示。

Part5字典的常用方法

1dict.keys()

在字典中,元素是以键-值对的方式存储的,一个键-值对是一个字典元素,有时候我们希望仅对字典的键做处理,或者判断字典中是否含有某个键,那么字典的 keys() 函数为这些事情提供了便利。这个方法的作用是返回一个 dict_keys() 对象,其中包含了字典中所有的键,我们也可以将它转为列表等其他组合类型,如下图所示。

如果只是想查看字典中是否包含某个键,我们可以使用另外一种更加简单直接的方式,如下图所示。

2dict.values()

前面讲到的 dict.keys() 会返回一个含有字典中所有键的 dict_keys 对象,那么 dict.values() 则是与它相对应的函数,dict.values() 的功能是返回一个含有字典所有元素“值”的 dict_values 对象。如下图所示。

3dict.items()

dict.keys()的功能是获取字典中所有的“键”;

dict.values()的功能是获取字典中所有的“值”;

dict.items() 的功能则是获取字典中所有的键-值对。返回值是一个 dict_items 对象,其中包含字典中所有的键-值对。这个函数经常与循环语句一起使用,起到同时循环键与值的作用。使用示例如下图所示。

以上就是 Python 中组合数据类型——字典的重要内容。

Part6Python 组合数据类型——元组

我们在介绍 Python 四大组合数据类型的其他三种时,要么独立成文,要么大费周章,怎么讲到元组这个类型的时候,只用一小节来介绍,是它的内容太少了吗?

确实是的,不仅如此,元组在 Python 编程中的存在感也比其他三种组合数据类型小了一大截。最大的原因就是,元组是一种不可变数据类型,一个元组被创建之后,就不会再产生变化,自然也不会有增、删、改等动态操作。只有一些类似于列表的基本操作,下面我们来简单介绍一下元组。

元组(tuple)是一种具有所有属性的序列类型,它本身是不可变数据类型,但是元组中的元素可以是任何数据类型,包括可变数据类型。元组在形态上与列表非常相似,区别在于列表是使用中括号[]来包裹元素的,而元组是使用小括号()包裹元素的,元组的示例图如下。

创建元组的方法如下图所示。

元组还有一些类似于列表的功能

(1) 元组切片

(2) 最大值最小值

(3) 统计元组中元素出现的次数

以上就是 Python 组合数据类型——元组的简单介绍。

Part7结束语

随着字典和元组的学习,Python 基础数据类型已经全部介绍给大家了,至此,Python 基础语法的学习已经进行了将近一半。

下期文章,我们将学习 Python 中更加高阶,更加实用的 Python 控制结构,包括但不限于循环语句、判断语句等,准备一起学习吧!




星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!

点击搜索你感兴趣的内容吧

往期推荐


基本无害 | 约翰·梅纳德·凯恩斯对计量经济学的批判

Python教学 | 组合数据类型-集合(内含实例)

社科大数据平台Python学习系列 | 组合数据类型-列表

社科大数据平台Python学习系列 | Python 变量与基本运算

社科大数据平台Python学习系列 | Python 字符串操作(下)

社科大数据平台Python学习系列 | Python 字符串操作(上)

社科大数据平台python学习系列 |Python 基本数据类型





数据Seminar




这里是大数据、分析技术与学术研究的三叉路口


文 | 两米哥


    欢迎扫描👇二维码添加关注    

点击下方“阅读全文”了解更多

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存